home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 112 / EnigmaAmiga112CD.iso / dalla rivista / posta / hdsleep.lha / HDSleep / Source / beginio.a next >
Text File  |  1996-11-03  |  2KB  |  85 lines

  1.     SECTION assembly,code
  2.  
  3.     XREF _OldBeginIO
  4.     XREF _Computer
  5.  
  6.     include "lvo/exec_lib.i"
  7.  
  8. ;
  9. ; Call scsi.device BeginIO()
  10. ; void CallBeginIO(struct register __a1 struct IORequest *);
  11. ;
  12.  
  13.     XDEF _CallBeginIO
  14. _CallBeginIO:
  15.     move.l _OldBeginIO,-(sp)
  16.     rts
  17.  
  18. ;
  19. ; Turn unit D0 to sleep
  20. ; void HDDriveOff(register __d0 UBYTE HDUnit);
  21. ;
  22.  
  23.     XDEF _HDDriveOff
  24. _HDDriveOff:
  25.     move.l    (4).w,a0    ; Get ExecBase
  26.     jsr    _LVOForbid(a0)
  27.     jsr    ChangeUnit    ; ChangeUnit();
  28.     cmp.l    #1,_Computer    ; if 1 then a4000
  29.     beq    a4000a
  30.     cmp.l    #2,_Computer    ; if 1 then elsat
  31.     beq    elsata
  32.     lea    $da201e,a0    ; HD command register (A1200)
  33.     bra    skip
  34. elsata:    lea    $eb8f00,a0    ; HD command register (ELSAT HD)
  35.     bra skip
  36. a4000a:    lea    $dd203e,a0    ; HD command register (A4000)
  37. skip:    move.b    #$e0,(a0)    ; Standby Immediate
  38.     move.b    #$e3,(a0)    ; Idle
  39. OffEnd:    move.l    (4).w,a0    ; Get ExecBase
  40.     jsr    _LVOPermit(a0)    ; Permit();
  41.     rts
  42.  
  43. ;
  44. ; Check unit D0 for hd present (does it work?)
  45. ; UBYTE CheckHD(register __d0 UBYTE HDUnit);
  46. ;
  47.  
  48.     XDEF _CheckHD
  49. _CheckHD:
  50.     move.l    (4).w,a0    ; Get ExecBase
  51.     jsr    _LVOForbid(a0)
  52.     jsr    ChangeUnit    ; ChangeUnit();
  53.     clr.b    d0
  54.     tst.l    _Computer        ; if 1 then a4000
  55.     beq    a4000b
  56.     cmpi.b    #$50,($da201e)    ; HD status register (A1200)
  57.     seq    d0        ; if(DrivePresent) d0=TRUE;
  58.     bra    skip2
  59. a4000b:    cmpi.b    #$50,($dd203e)    ; HD status register (A4000)
  60.     seq    d0        ; if(DrivePresent) d0=TRUE;
  61. skip2:    move.l    (4).w,a0    ; Get ExecBase
  62.     jsr    _LVOPermit(a0)
  63.     rts
  64.  
  65. ;
  66. ; Change to Unit D0
  67. ; void ChangeUnit(register __d0 UBYTE HDUnit);
  68. ;
  69.  
  70. ChangeUnit:
  71.     asl.l    #4,d0
  72.     ori.w    #$a0,d0
  73.     cmp.l    #1,_Computer    ; if 1 then a4000
  74.     beq    a4000c
  75.     cmp.l    #2,_Computer    ; if 2 then ELSAT
  76.     beq    elsatc
  77.     move.b    d0,($da201a)    ; HD drive/unit register (A1200)
  78.     rts
  79. a4000c:    move.b    d0,($dd203a)    ; HD drive/unit register (A4000)
  80.     rts
  81. elsatc:
  82. ;    move.b    d0,($eb8efc)    ; HD drive/unit register (ELSAT) ????
  83.     rts
  84.     end
  85.